<?php
/*
	兼容插件开发
	
*/
defined('BY_JYA') or exit('error');
$_RQ['op']=$_RQ['op']?$_RQ['op']:'list';
$return=array();
$return['styles']=array(
		'1'=>'行业应用',
		'2'=>'促销应用',
		'3'=>'互动营销',
		'4'=>'游戏营销',
		'5'=>'辅助应用',
		'6'=>'云接口',
);
if($_RQ['op']=='list'){
	//搜索
	$return['params']=$params=array();
	$params['is_my']=1;
	$params['type']=4;
	if($_RQ['title']){
		$params['title like']='%'.$_RQ['title'].'%';
	}
	$pindex = max(1, intval($_RQ['page']));
	$psize = 20;
	$total='';
	$fields=array('id','name','hide','cloud_id','up_my','title','is_local');
	$list=pdo_getslice('core_plugins',$params,array($pindex,$psize),$total,$fields,'','id desc');
	foreach($list as &$item){
		$item['config']=array('op'=>'config','query'=>'plugin_name='.$item['name'],'title'=>'生成配置文件');
		$item['down']=array('op'=>'down','query'=>'plugin_name='.$item['name'],'title'=>'打包下载');
		$item['look']=array('plugin'=>$item['name'],'action'=>'basic.module_home','title'=>'查看效果');
		$item['iscloud']=$item['cloud_id']>0?1:0;
		$item['cancloud_id']=$item['cloud_id']==0 && $item['is_local']!=1?1:0;
	}
	$return['list']=$list;
	$totalpage=ceil($total/$psize);
	$totalpage=intval($totalpage);
	$return['totalpage'] =$totalpage;
	$return['params']['page'] =$pindex;
	//页面显示设置
	$htmls=array(
		'type'=>'list',
		'tabs'=>array(
			'0'=>array('op'=>'list','title'=>'插件列表'),
		),
		'list'=>array('data'=>'list','tip'=>'此处用于管理兼容插件，如需删除插件，请到系统管理——插件管理中卸载！','delall'=>false,'del_one'=>false,'list'=>array(
			array('name'=>'name','title'=>'插件标识','type'=>'string'),
			array('name'=>'title','title'=>'插件名称','type'=>'string'),
			array('name'=>'iscloud','title'=>'已发布进云市场？','type'=>'radio','options'=>'iscloud'),
			array('name'=>'up_my','title'=>'已发布个人市场？','type'=>'radio','options'=>'isup_my'),
			array('name'=>'is_local','title'=>'私域插件？','type'=>'switch','set'=>'set'),
			array('name'=>'look','title'=>'查看效果','type'=>'href'),
		),'action'=>array(
			array('op'=>'release','title'=>'发布进云市场','type'=>'post','show'=>array('cancloud_id'=>1)),
			array('op'=>'releasemy','title'=>'发布个人市场','type'=>'post','show'=>array('up_my'=>'0')),
			array('op'=>'install_data','title'=>'初始数据设置','type'=>'href'),
			array('op'=>'table','title'=>'数据表设置','type'=>'href'),
			array('type'=>'post','message'=>'确定已经设置好数据表和初始化数据吗？（默认以插件标识为数据表前缀的，无需设置！）','name'=>'config','title'=>'生成配置文件'),
			array('type'=>'post','name'=>'down','title'=>'打包下载'),
		)),
		'search_one'=>array('name'=>'title'),
	);
	$return['iscloud']=array('未发布','已发布');
	$return['isup_my']=array('未发布','已发布');
	$return['htmls']=$htmls;
	exi($return);
}
if($_RQ['op']=='config'){
	//生成配置文件
	$name=trim($_RQ['plugin_name']);
	$manifestxml=model('core/module')->int_manifest($name);
	file_put_contents(ROOT_PLUGIN.$name.'/manifest.xml',$manifestxml);
	exi('成功生成配置文件！可在插件根目录下查看！');
}
if($_RQ['op']=='down'){
	$url=download_url('core/app_develop.old_plugin/down_load/plugin_name='.$_RQ['plugin_name']);
	exi('','',$url);
}
if($_RQ['op']=='down_load'){
	//生成配置文件
	$name=trim($_RQ['plugin_name']);
	if(!$name || preg_match('/\W/',$name)){
		exit('下载出错！');
	}
	$dir=ROOT_PLUGIN.$name;
	if(!is_dir($dir)){
		exit('插件不存在！');
	}
	do{
		$zip=ROOT_AT.random(10).'.temp';
	}while(is_file($zip));
	cfc('files')->zip($dir,$zip);
	header('content-type: application/zip');
	header('content-disposition: attachment; filename="' . $name . '.zip"');
	readfile($zip);
	@unlink($zip);
	exit();
}
if($_RQ['op']=='release'){
	$id=intval($_RQ['id']);
	if(!$id){
		exi('请先选择插件！','error');
	}
	$params=array('id'=>$id);
	$plugin=pdo_get('core_plugins',$params);
	if($plugin['cloud_id']){
		//已存在cloud_id说明插件已经发布过了，直接前往发布版本
		$_SESSION['app_release']['plugin_name']=$plugin['name'];
		$url='core/app_release.plugin/v_add/cloud_id='.$plugin['cloud_id'];
	}else{
		$url='core/app_release.plugin/edit/name='.$plugin['name'];
	}
	exi('','',$url);
}
if($_RQ['op']=='releasemy'){
	$id=intval($_RQ['id']);
	if(!$id){
		exi('请先选择插件！','error');
	}
	$params=array('id'=>$id);
	$plugin=pdo_get('core_plugins',$params);
	pdo_update('core_plugins',array('up_my'=>1),$params);
	$_SESSION['app_release']['plugin_name']=$plugin['name'];
	$url='core/app_release.plugin/v_add/is_local=1&id='.$id;
	if(!$plugin['cloud_id']){
		exi('发布个人市场成功！还差发布新版本！（只有发布了版本的应用才能真正上架市场！）','',$url);
	}else{
		exi('发布个人市场成功！');
	}
}
if($_RQ['op']=='edit'){
	$id=intval($_RQ['id']);
	if($id){
		$item=pdo_get('core_plugins',array('id'=>$id));
		$old=pdo_get('core_old_plugins',array('name'=>$item['name']));
		$item=array_merge($old,$item);
		if($item['covers']){
			$item['covers']=json_decode($item['covers'],true);
		}
		if($item['menus']){
			$item['menus']=json_decode($item['menus'],true);
		}
		
	}else{
		$item=array();
	}
	$return['item']=$item;
	$return['htmls']=array(
		'type'=>'edit',
		'desc'=>'设置插件信息。注意，此处用于导入插件到系统，插件文件请先行放到系统插件目录，插件数据表也请先行导入。',
		'post'=>'post',
		'tabs'=>array(
			array('op'=>'list','title'=>'返回插件列表'),
		),
		'edit'=>array(
			array('name'=>'name','type'=>'string','title'=>'插件标识'),
			array('name'=>'title','type'=>'string','title'=>'插件名称'),
			array('name'=>'image','type'=>'image','title'=>'插件logo'),
			array('name'=>'style','title'=>'插件类型','type'=>'radio','options'=>'styles'),
			array('name'=>'need_menu','type'=>'switch','title'=>'是否需要系统菜单','help'=>'如果插件页面是完整页面，例如人人商城等则无需系统菜单；如果插件相对简单，如智慧预约等，需要系统菜单充实页面'),
			array('name'=>'setting','type'=>'switch','title'=>'是否含有参数设置页','help'=>'根据插件具体情况设置'),
			array('name'=>'ability','type'=>'string','title'=>'插件简介'),
			array(
				'type'=>'array',
				'name'=>'covers',
				'show_detail'=>true,
				'title'=>'功能入口设置',
				'add_tip'=>'添加一个入口',
				'list'=>array(
					array('type'=>'string','name'=>'name','title'=>'入口页面action'),
					array('type'=>'string','name'=>'title','title'=>'入口名称'),
				),'details'=>array(
					array('type'=>'string','name'=>'name','title'=>'页面action'),
					array('type'=>'string','name'=>'title','title'=>'页面名称'),
				)
			),
			array(
				'type'=>'array',
				'name'=>'menus',
				'show_detail'=>true,
				'title'=>'功能菜单设置',
				'add_tip'=>'添加一个菜单',
				'list'=>array(
					array('type'=>'string','name'=>'name','title'=>'页面action'),
					array('type'=>'string','name'=>'title','title'=>'页面名称'),
				),'details'=>array(
					array('type'=>'string','name'=>'name','title'=>'页面action'),
					array('type'=>'string','name'=>'title','title'=>'页面名称'),
				)
			),
		),
	);
	exi($return);
}
if($_RQ['op']=='post'){
	$post=get_postdata();
	$data=array(
		'name'=>$post['name'],
		'title'=>$post['title'],
		'image'=>$post['image'],
		'covers'=>ijson_encode($post['covers']),
		'menus'=>ijson_encode($post['menus']),
		'description'=>$post['description'],
		'style'=>intval($post['style']),
	);
	$old=array(
		'need_menu'=>intval($post['need_menu']),
		'setting'=>intval($post['setting']),
		'name'=>$post['name'],
	);
	$id=intval($post['id']);
	if($id){
		
		pdo_update('core_plugins',$data,array('id'=>$id));
		pdo_update('core_old_plugins',$old,array('name'=>$post['name']));
	}else{
		$data['is_my']=1;
		$data['type']=4;
		$data['hide']=1;
		pdo_insert('core_plugins',$data);
		pdo_insert('core_old_plugins',$old);
	}
	exi('操作成功！','','list');
}
if($_RQ['op']=='table'){
	//插件数据表管理，对于兼容插件，开发者在此处设置插件所属数据表，方便同步云平台
	$id=intval($_RQ['id']);
	if($id){
		$plugin_name=pdo_getcolumn('core_plugins',array('id'=>$id),'name');
	}else{
		$plugin_name=$_RQ['name'];
	}
	if($plugin_name){
		$_SESSION['module']['plugin_name']=$plugin_name;
	}
	$pindex = max(1, intval($_RQ['page']));
	$psize = 15;
	$params=array('plugin_name'=>$_SESSION['module']['plugin_name']);
	//忽略项目名称
	if(!empty($_RQ['name'])){
		$params['name like']='%'.trim($_RQ['name']).'%';
		$return['params']['name']=$_RQ['name'];
	}
	$list=pdo_getslice('core_plugin_tables',$params,array($pindex,$psize),$total,array(),'','id desc');
	$return['list']=$list?$list:array();
	$totalpage=ceil($total/$psize);
	$totalpage=intval($totalpage);
	$return['totalpage'] =$totalpage;
	$return['params']['page'] =$pindex;
	$return['htmls']=array(
		'type'=>'list',
		'tabs'=>array(
			array('op'=>'list','title'=>'回到插件列表'),
			array('op'=>'table_add','title'=>'添加数据表'),
		),
		'list'=>array('data'=>'list','tip'=>'这里是用于支持打包插件，所需的设置；大部分原生插件是不需要设置数据表的，除部分兼容插件（安装的数据表名跟插件标识不一致的才需要）。','edit_op'=>'table_edit','del_op'=>'table_del','list'=>array(
			array('type'=>'string','name'=>'name','title'=>'数据表名'),
		)),
		'search_one'=>array('name'=>'name','add_op'=>'table_add'),
	);
	exi($return);
}
if($_RQ['op']=='install_data'){
	//设置初始化数据设置
	$id=intval($_RQ['id']);
	if($id){
		$name=pdo_getcolumn('core_plugins',array('id'=>$id),'name');
	}else{
		$name=$_RQ['name'];
	}
	if($name){
		$_SESSION['module']['plugin_name']=$name;
	}
	$name=$_SESSION['module']['plugin_name'];
	$list=pdo_getall('core_plugin_install_data',array('plugin_name'=>$name));
	if($list){
		foreach($list as &$item){
			if(!$item['type']){
				$item['num']='表内所有数据';
			}
		}
	}
	$return['list']=$list;
	$return['htmls']=array(
		'type'=>'list',
		'tabs'=>array(
			array('op'=>'list','title'=>'回到插件列表'),
			array('op'=>'data_edit','title'=>'添加初始化数据'),
		),
		'list'=>array('data'=>'list','tip'=>'这里是用于支持打包插件，所需的设置；（大部分插件是不需要初始化数据的，部分插件可能需要初始化数据。例如：默认任务执行数据，默认模板消息数据等），选择需要初始化数据的表，打包时会追加到安装数据里面','edit_op'=>'data_edit','del_op'=>'data_del','pagelist'=>false,'list'=>array(
			array('type'=>'string','name'=>'table','title'=>'数据表名'),
			array('type'=>'string','name'=>'num','title'=>'初始化数据条数'),
		)),
		'search_one'=>array('name'=>'table','add_op'=>'data_edit'),
	);
	exi($return);
}
if($_RQ['op']=='data_edit'){
	if($_RQ['postdata']){
		$post=get_postdata();
		if(!pdo_tableexists($post['table'])){
				exi($post['table'].'表不存在！','error');
		}
		$data=array_fields(array('table','type','num'),$post);
		$id=intval($post['id']);
		if($id){
			pdo_update('core_plugin_install_data',$data,array('id'=>$id));
		}else{
			$data['plugin_name']=$_SESSION['module']['plugin_name'];
			pdo_insert('core_plugin_install_data',$data);
		}
		exi('操作成功！','','install_data');
	}
	$id=intval($_RQ['id']);
	if($id){
		$item=pdo_get('core_plugin_install_data',array('id'=>$id));
	}else{
		$item=array();
	}
	$return['types']=array(
		'0'=>'表内全部数据',
		'1'=>'自定义条数',
	);
	$return['item']=$item;
	$return['htmls']=array(
		'type'=>'edit',
		'desc'=>'设置初始化数据',
		'tabs'=>array(
			array('op'=>'install_data','title'=>'返回初始化数据列表'),
		),
		'edit'=>array(
			array('type'=>'string','name'=>'table','title'=>'填写数据表名','help'=>'填写不含表前缀的数据表名'),
			array('type'=>'radio','name'=>'type','title'=>'数据条数类型','options'=>'types'),
			array('type'=>'string','name'=>'num','show'=>array('type',1),'title'=>'数据条数','help'=>'设置该数据表前多少条数据作为初始化数据'),
		),
	);
	exi($return);
}
if($_RQ['op']=='data_del'){
	$id=intval($_RQ['id']);
	if($id){
		pdo_delete('core_plugin_install_data',array('id'=>$id));
	}
	$del=trim($_RQ['del'],';');
	if($del){
		$del=explode(';',$del);
		foreach($del as $id){
			$id=intval($id);
			if($id){
				pdo_delete('core_plugin_install_data',array('id'=>$id));
			}
		}
	}
	exi('删除成功！');
}
if($_RQ['op']=='table_add'){
	//插件数据表管理，对于兼容插件，开发者在此处设置插件所属数据表，方便同步云平台
	if(!empty($_RQ['title'])){
		$tables=pdo_fetchall("SHOW TABLES LIKE '%".$_RQ['title']."%'");
		$return['params']['title']=$_RQ['title'];
	}else{
		$tables=pdo_fetchall("SHOW TABLES");
	}
	$has=pdo_getall('core_plugin_tables',array('plugin_name'=>$_SESSION['module']['plugin_name']),array('name'),'name');
	$list=array();
	$num=0;//每次最多读取50张表
	foreach($tables as &$table){
		$table=array_shift($table);
		$table=explode('_',$table,2);
		$table=$table['1'];
		if(!$has[$table] && $num<50){
			$list[]=array('id'=>$table);
			$num++;
		}
	}
	$return['list']=$list;
	$return['htmls']=array(
		'type'=>'list',
		'tabs'=>array(
			array('op'=>'list','title'=>'回到插件列表'),
			array('op'=>'table','title'=>'查看已添加的数据表'),
		),
		'list'=>array('data'=>'list','edit'=>false,'pagelist'=>false,'del_one'=>false,'delall'=>false,'del_message'=>'确认添加吗？','del_title'=>'添加','list'=>array(
			array('type'=>'string','name'=>'id','title'=>'数据表名'),
		),'batch'=>array(
			array('type'=>'post','url'=>'table_add_post','title'=>'一键添加'),
		)),
		'search_one'=>array('name'=>'title','add'=>false),
	);
	exi($return);
}
if($_RQ['op']=='table_add_post'){
	$ids=trim($_RQ['ids'],';');
	if($ids){
		$ids=explode(';',$ids);
	}else{
		$ids=array();
	}
	if($_RQ['id']){
		$ids[]=$_RQ['id'];
	}
	if($ids){
		foreach($ids as $name){
				$check=pdo_getcolumn('core_plugin_tables',array('name'=>$name,'plugin_name'=>$_SESSION['module']['plugin_name']),'id');
				$plugin_name=$_SESSION['module']['plugin_name'];
				if(!$check){
					$data=array(
						'plugin_name'=>$plugin_name,
						'name'=>$name,
					);
					pdo_insert('core_plugin_tables',$data);
				}
		}
		exi('添加成功！');
	}
	exi('请先选择要添加的数据表！','error');
}
if ($_RQ['op'] == 'table_del') {
	//删除忽略设置
	$id=intval($_RQ['id']);
	if($id){
		pdo_delete('core_plugin_tables',array('id'=>$id));
	}
	$del=trim($_RQ['del'],';');
	if($del){
		$del=explode(';',$del);
		foreach($del as $id){
			$id=intval($id);
			if($id){
				pdo_delete('core_plugin_tables',array('id'=>$id));
			}
		}
	}
	exi('删除成功！');
}
if($_RQ['op']=='set'){
	$id=intval($_RQ['id']);
	if(!$id){
		exi('请先选择插件！','error');
	}
	$update=array();
	$post=get_postdata();
	if(isset($post['is_local'])){
		$update['is_local']=intval($post['is_local']);
		if(intval($post['is_local'])==0){
			$name=pdo_getcolumn('core_plugin',array('id'=>$id),'name');
			$params=array('name'=>$name);
			$checkname=cloud_request('plugin.plugin.checkname',$params);
			if($checkname=='error'){
				exi('设置失败！进云市场已经存在本插件标识！','error');
			}
		}
	}
	if($update){
		pdo_update('core_plugins',$update,array('id'=>$id));
	}
	exi('操作成功！');
}